title eilute
.model small
.data
    pranesimas db 'Programa apdoroja simboliu eilute, pirma simboli keicia su treciu, antra su ketvirtu ir t.t. Iveskite simboliu eilute: $' ; pranesimas
    pranesimas_apdorota db 13, 10, 'Apdorota eilute: $' ; pranesimas pries pateikiant apdorota eilute, simboliai 13 ir 10 reikalingi kursoriui perkelt i nauja eilute
    eilute db 120, 121 dup (0) ;eilutes nuskaitymo vieta (buferis)
    	;uzduotyje nurodyta, kad maximlaus eilutes ilgis - 120, todel i pirma pozicija, kuri nurodo max ilgi irasome 120, o toliau 121 karta irasom 0
    ;121 karta del to, jog 2-a buferio pozicija nurodo dabartini eilutes ilgi, o likusieji 120 poziciju skirtos eilutes simboliams
    eilute_apdorota db 121 dup (0) ;eilutes isvedimo buferis, kadangi eilute max ilgis gali buti 120,
        ; o mum dar reikes dolerio zenkla irasyt i apdorotos eilutes gala, tai cia nurodom 121
    
.code

main proc ;pagrindine procedura, nebutina, bet taip gal patogiau
    
    mov ax, @data ;data segmento inicijavimas
    mov ds, ax
    
    lea dx, pranesimas ;pranesimo isvedimas
    mov ah, 09h ;naudojant 09h DOS funkcija
    int 21h ;ir 21 pertraukima
    
    lea dx, eilute ;eilutes nuskaitymas
    mov ah, 0ah ;0ah DOS funkcija
    int 21h ;21 pertaukimas
    
    lea si, eilute ;uzkraunam eilutes buferio efektyvu adresa i si
    inc si ;padidinam ta adresa vienu (2-oje pozicijoje - dabartinis eilutes ilgis)
    	;taip suzinom kiek simboliu buvo ivesta
    mov cl, [si] ;perrasom ta ilgi i cl. tai bus skaitliukas kiek simobliu liko neapdorota
    inc si ;dar padidinam adresa, kad jau rodytu i pirmaji ivesta simboli
        
    lea di, eilute_apdorota ;uzkraunam busimos apdorotos eilutes buferio adresa i di
    
    
    apdorojimas4: ;apdorojimo veiksmai, kai yra like 4 ir daugiau simboliu
    cmp cl, 3h ; patikrinam, gal jau liko tik 3 simboliai
    je apdorojimas3 ;tai sokam prie 3
    
    cmp cl, 2h ; o gal tik 2
    je apdorojimas12 ;sokam prie apdorojimo, kai tik 1 arba 2 like
   
    cmp cl, 1h ;o gal tik 1
    je apdorojimas12 ;sokam ten pat
    
    jl pabaiga ;o jei maziau nei vienas, t.y. nulis, tai i pabaiga
        
    add di, 2h ;didinam apdorotos eilute buferio pozicija per 2 (1 simboli irasysim i ta vieta, kur trecias yra)
    mov bl, [si] ;irasom ta simboli is nuskaitytos eilutes i registra
    mov [di], bl ;irasom jau i ta vieta
          
    dec cl ;mazinam skaitliuka (vienu simboliu maziau jau liko)
    
    inc si ;didinam abu adresus per viena - pereinam prie sekancio simbolio
    inc di
    
    mov bl, [si] ;vel perrasom
    mov [di], bl
    
    dec cl ;mazinam skaitliuka
    
    inc si ;didinam ivestos eilutes adresa
    sub di, 3h ; o apdorotos - mazinam per tris, nes dabar reik jau trecia simboli irasyt i pirmo vieta, tai reik sugrizt
    
    mov bl, [si] ;perrasom
    mov [di], bl
    
    dec cl ;mazinam skaitliuka
    
    inc si ;didinam abu adresus - pereinam prie sekancio simbolio
    inc di
    
    mov bl, [si] ;perrasom
    mov [di], bl
          
    dec cl ;mazinam skaitliuka      
              
    inc si ;didinam adresa ivestos eilutes
    add di, 3h ; o apdorotos didinam per tris, nes sekantys du simboliai jau irasyti, tai reik pereit uz ju
    
    jmp apdorojimas4 ;sokam i apdorojima vel, kartojam viska
    
    apdorojimas3: ;jei liko trys
    
    add di, 2h ;vel didinam apdorotos eilutes pozicija per du
    mov bl, [si] ;perrasom
    mov [di], bl
    
    inc si ;didinam adresa ivestos
    dec di ;mazinam adresa apdorotos (taip darom, nes sito simbolio neber su kuo keist ir ji reik palikt savo vietoj
    
    mov bl, [si] ;perrasom
    mov [di], bl
    
    inc si ;ir vel didinam
    dec di ;mazinam - grizom i pirmojo vieta ir perrasysim trecia i ji
    
    mov bl, [si] ; perrasom
    mov [di], bl
    
    add di, 2h ;padidinam adresa per du, kad rodytu i gala eilutes
    
    jmp pabaiga ;i pabaiga
    
    apdorojimas12: ;apdorojimas, kai liko 1 arba 2 simboliai
    
    cmp cl, 1h ;jei vienas
    je liko_vienas ; tai vienas ;)
    
    mov bl, [si] ;perrasom
    mov [di], bl
    
    inc si ;didinam adresus (nera su kuo keist, tai tik didinam ir perrasinejam paeiliui)
    inc di
    
    liko_vienas: ; jei liko vienas
    
    mov bl, [si] ;perrasom...
    mov [di], bl
    
    pabaiga: ; pabaiga
    
    inc di ;padidinam apdorotos eilutes adresa
    mov [di], '$' ; irasom dolerio zenkla i gala, kad DOS funkcija zinotu, kur sustabdyt isvedima
    
    lea dx, pranesimas_apdorota ;uzkraunam pranesimo adresa i atminti
    mov ah, 09h ; DOS funkcija 09h
    int 21h ;21 pertraukima, isvedam pranesima
        
    lea dx, eilute_apdorota ;apdorotos eilutes adresa uzkraunam
    mov ah, 09h ; 09h DOS funkcija
    int 21h ; 21 pertraukimas
    
    mov ah, 4ch ; DOS funcija 4ch uzbaigia programos darba
    int 21h ; 21 pertraukimas
    
endp main ; proceduros pabaiga

end